/*
 * Via deze servlet krijgt de gebruiker de details van een voorstelling.
 * Hier kan hij dan het aantal plaatsen invullen dat hij wenst te hebben.
 * Na bevestiging hiervan plaatst de gebruiker deze voorstelling in zijn winkelmandje.
 */
package be.vdab.servlets;

import be.vdab.dao.VoorstellingDAO;
import be.vdab.entiteit.Reservatie;
import be.vdab.entiteit.Voorstellingen;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author tom.vanpoucke
 */
@WebServlet("/voorstelling/reserveren.htm")
public class ReserverenServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private static final String VIEW = "/WEB-INF/JSP/reserveren.jsp";
    private static final String REDIRECT_URL = "/voorstellingen/winkelmandje.htm";
    private final VoorstellingDAO voorstellingDAO = new VoorstellingDAO();
    
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        HttpSession session = request.getSession();
        List<String> fouten = (List<String>) session.getAttribute("fouten");
        session.removeAttribute("fouten");
        int nummer = Integer.parseInt(request.getParameter("nummer"));
        request.setAttribute("voorstelling", voorstellingDAO.read(nummer));     
        request.setAttribute("nummer", nummer);
        request.setAttribute("fouten", fouten);
        RequestDispatcher dispatcher = request.getRequestDispatcher(VIEW);
        dispatcher.forward(request, response);
    } 
    
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        HttpSession session = request.getSession();
        @SuppressWarnings("unchecked")               
        List<String> fouten = new ArrayList<String>();       
        String plaatsen = request.getParameter("plaatsen");
        if(plaatsen == null || plaatsen.isEmpty()){
            fouten.add("geef een getal");
        }  
        try{                 
            Voorstellingen voorstelling = voorstellingDAO.read(Integer.parseInt(request.getParameter("nummer")));              
            if(Integer.parseInt(plaatsen) > 0 && Integer.parseInt(plaatsen) <= voorstelling.getVrijePlaatsen()){
                    Set<Reservatie> voorstellingenInMandje = (Set<Reservatie>) session.getAttribute("mandje");                 
                    if(voorstellingenInMandje == null){
                        voorstellingenInMandje = new LinkedHashSet<Reservatie>();
                    }
                    boolean update = false;                  
                    for (Reservatie reservaties : voorstellingenInMandje){
                        if(reservaties.getVoorstelling().equals(voorstelling)){
                            reservaties.setPlaatsen(Integer.parseInt(plaatsen));
                            update = true;
                        }
                    }
                    if(!update){
                        Reservatie reservatie = new Reservatie(voorstelling, Integer.parseInt(plaatsen)); 
                        voorstellingenInMandje.add(reservatie);
                    }             
                    session.setAttribute("mandje" , voorstellingenInMandje);
            }
            else{
                fouten.add("geef juist aantal plaatsen");
            }
         }
         catch(Exception ex){
         } 
        if(fouten.isEmpty()){
            response.sendRedirect(response.encodeRedirectURL(request.getContextPath() + REDIRECT_URL));
        }
        else{
            //FOUTENafhandeling         
            session.setAttribute("fouten", fouten);
            String snr = request.getParameter("nummer");
            response.sendRedirect(request.getContextPath()+"/voorstelling/reserveren.htm?nummer="+snr);
        }
   }
}
